

# 此示例示意使用super函数，显式调用父类覆盖版本的函数

class A:
    def smoke(self):
        print('A.吸烟')
    def drink(self):
        print('A.喝酒')

class B(A):
    def smoke(self):
        print('B.吸烟')
    def tangtou(self):
        print('B.烫头')

    def do_something(self):
        # 在B类的方法内调用自己B类的 smoke方法
        self.smoke()  # 'B.吸烟'
        super(B, self).smoke()  # 'A.吸烟'
        super().smoke()  # 'A.吸烟'  # 在方法内,super函数可以不提供参数
        self.drink()
        self.tangtou()

# super的第一种调用方法：如果在 子类的外部调用被覆盖的父类的方法则
# 必须使用两个参数的super 函数
b = B()
b.smoke()  # 'B.吸烟'
A.smoke(b)  # 'A.吸烟'
super(B, b).smoke()  # 'A.吸烟'  # 调用B类的上一级父类的方法

print('===================')
b.do_something()